var QSSmartSealWX = require("utils/QS_Minprogram_SDK_V1.0");
var qssealsdk;
//定位服务
var QQMapWX = require('utils/qqmap-wx-jssdk');
var qqmapsdk;
App({
  onLaunch: function () {
    var app = this;
    // 监听网络连接状态
    wx.onNetworkStatusChange(function (res) {
      app.globalData.networkStatus = res.isConnected;
      if(!res.isConnected){
          wx.showToast({
            title: '网络已断开！',
          })
          app.disconnectDevice();
      }
    })
  },
  onShow:function(options){
    var app = this;
    // 重置变量
    app.globalData.networkStatus = false;
    app.globalData.latitude = null;
    app.globalData.longitude = null;
    app.globalData.address = null;
    // 实例化地图API
    qqmapsdk = new QQMapWX({
      key: 'IARBZ-2PI6B-U56UA-NEY7Y-AKOTS-JRBHK'
    });
    // 检查更新
    app.autoUpdate();
    
    // 设置屏幕常亮
    wx.setKeepScreenOn({
      　　keepScreenOn: true,
    });
    // 设置导航栏高度
    this.setNavBarHeight(options);
    // 获取网络连接状态
    wx.getNetworkType({
      success: (result) => {
        if(result.networkType == 'none' || result.networkType == 'unknown'){
            app.globalData.networkStatus = false;
            app.disconnectDevice();
        } else {
            app.globalData.networkStatus = true;
            // 获取当前位置
            app.getLocation();
        }
      },
    })
    var path = options.path;
      if(path.indexOf("agency") !=-1){
        // 判断如果代理商出库不是H5开放标签进入，则返回小程序首页
        if(options.scene != 1167){
          wx.switchTab({
            url: '/pages/tabbar/home/index',
          })
        }
      }
      if(path.indexOf("storedelivery") != -1){
        // 判断门店装章不是从公众号菜单进入，则返回小程序首页
        if(options.scene != 1035){
          wx.switchTab({
            url: '/pages/tabbar/home/index',
          })
        }
      }
  },
  onHide:function(){
    // 关闭蓝牙
    this.disconnectDevice();
  },
  // 关闭蓝牙模块，释放所有资源
  disconnectDevice(){
    qssealsdk = QSSmartSealWX.getInstance();
    qssealsdk.disConnectDevice();
  },
  onError:function(){
  },
  autoUpdate: function(){
    let _this = this
    // 获取小程序更新机制的兼容，由于更新的功能基础库要1.9.90以上版本才支持，所以此处要做低版本的兼容处理
    if(wx.canIUse('getUpdateManager')){
      // wx.getUpdateManager接口，可以获知是否有新版本的小程序、新版本是否下载好以及应用新版本的能力，会返回一个UpdateManager实例
      const updateManager = wx.getUpdateManager()
      // 检查小程序是否有新版本发布，onCheckForUpdate：当小程序向后台请求完新版本信息，会通知这个版本告知检查结果
      updateManager.onCheckForUpdate(function(res){
        // 请求完新版本信息的回调
        if(res.hasUpdate){
          // 检测到新版本，需要更新，给出提示
          wx.showModal({
            title: '更新提示',
            content: '检测到新版本，是否下载新版本并重启小程序',
            success: function(res){
              if(res.confirm){
                // 用户确定更新小程序，小程序下载和更新静默进行
                _this.downLoadAndUpdate(updateManager)
              }else if(res.cancel){
                // 若用户点击了取消按钮，二次弹窗，强制更新，如果用户选择取消后不需要进行任何操作，则以下内容可忽略
                wx.showModal({
                  title: '提示',
                  content: '本次版本更新涉及到新功能的添加，旧版本将无法正常使用',
                  showCancel: false, // 隐藏取消按钮
                  confirmText: '确认更新', // 只保留更新按钮
                  success: function(res){
                    if(res.confirm){
                      // 下载新版本，重启应用
                      _this.downLoadAndUpdate(updateManager)
                    }
                  }
                })
              }
            }
          })
        } 
      })
    } else {
      // 在最新版本客户端上体验小程序
      wx.showModal({
        title: '提示',
        content: '当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试',
      })
    }
  },
  // 下载小程序最新版本并重启
  downLoadAndUpdate: function(updateManager){
    wx.showLoading()
    // 清除缓存
    try{
      wx.removeStorageSync('userInfo');
      wx.removeStorageSync('defaultCompany')
    } catch(e){

    }
    // 静默下载更新小程序新版本，onUpdateReady：当新版本下载完成回调
    updateManager.onUpdateReady(function(){
      wx.hideLoading()
      // applyUpdate：强制当前小程序应用上新版本并重启
      updateManager.applyUpdate()
    })
    // onUpdateFailed：当新版本下载失败回调
    updateManager.onUpdateFailed(function(){
      // 下载新版本失败
      wx.showModal({
        title: '已有新版本',
        content: '新版本已经上线了，请删除当前小程序，重新搜索打开',
      })
    })
  },
  setNavBarHeight:function(e){
    // 判断是否由分享进入小程序
    if (e.scene == 1007 || e.scene == 1008) {
      this.globalData.share = true
    } else {
      this.globalData.share = false
    }
    //获取设备顶部窗口的高度（不同设备窗口高度不一样，根据这个来设置自定义导航栏的高度）
    //这个最初我是在组件中获取，但是出现了一个问题，当第一次进入小程序时导航栏会把
    //页面内容盖住一部分,当打开调试重新进入时就没有问题，这个问题弄得我是莫名其妙
    //虽然最后解决了，但是花费了不少时间
    wx.getSystemInfo({
      success: res => {
        this.globalData.height = res.statusBarHeight
      }
    })
  },
  // 获取位置
  getLocation(){
    var app = this;
    wx.getSetting({
      withSubscriptions: true,
      success(res){
        var authSetting = res.authSetting;
        if(authSetting['scope.userLocation']){
          wx.getLocation({
            type:'gcj02',
            success(res){
              app.globalData.latitude = res.latitude;
              app.globalData.longitude = res.longitude;
              app.getAddress();
            },
            fail(f){
              wx.showToast({
                title: '获取位置失败!',
                icon:'error'
              })
            }
          })
        } else {
          wx.showModal({
            title:'获取定位权限',
            content:'您的位置信息将用于小程序启动印章',
            success(r){
              if(r.confirm){
                wx.openSetting({
                  withSubscriptions: true,
                  success(res){
                    var authSetting = res.authSetting;
                    if(authSetting['scope.userLocation']){
                      
                    } else {
                      wx.showToast({
                        title: '定位权限获取失败',
                        icon:'none'
                      })
                    }
                  }
                })
              }
            }
          })
        }
      }
    })
  },
  // 根据经纬度解析地址信息
  getAddress(){
    var app = this;
    qqmapsdk.reverseGeocoder({
      location: {
        latitude: app.globalData.latitude,
        longitude:app.globalData.longitude
      },
      success:function(pos){
        if(pos.status == 0){
          app.globalData.address = pos.result.address_component.province + pos.result.address_component.city + pos.result.formatted_addresses.recommend;
        } else {
          wx.showModal({
            title:'获取地址异常',
            content:'获取到地址信息异常，请退出程序1分钟后重新进入！',
            showCancel:false,
            success(r){
  
            }
          })
        }
      },
      fail:function(f){
        wx.showModal({
          title:'获取地址失败',
          content:'获取到地址信息失败，请退出程序1分钟后重新进入！',
          showCancel:false,
          success(r){

          }
        })
      }
    });
  },
  globalData: {
    // 网络状态
    networkStatus:false,
    // 纬度
    latitude:null,
    // 经度
    longitude:null,
    // 地址解析
    address:null,

    statusBarHeight: wx.getSystemInfoSync()['statusBarHeight'],
    share: false, // 分享默认为false
    height: 0 // 顶部高度
  }
})